package work20241226;

/**
 * @author zdl
 * @date 2024/12/26
 */
public class Demo11_2 {
    static int num = 1;
    static final Object obj = new Object();
    public static void main(String[] args) {
        //11. 编写一个程序，使用同步代码块确保两个线程能够交替打印数字。
        new Thread(new Runnable() {
            @Override
            public void run() {
                //t1 打印奇数
                while (true){
                    synchronized (obj){
                        if (num % 2 != 0){ //奇数
                            System.out.println(Thread.currentThread().getName()+"线程打印:"+num);
                            num++; //奇数++ 后为偶数  需要唤醒偶数线程
                            obj.notify();
                        }else {//偶数  等待
                            try {
                                obj.wait();
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            }
        },"奇数线程1").start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    //打印偶数
                    synchronized (obj){
                        if (num % 2 == 0){ //偶数
                            System.out.println(Thread.currentThread().getName()+"线程打印:"+num);
                            num++; //偶数++ 后为奇数  需要唤醒奇数线程
                            obj.notify();
                        }else {//奇数  等待
                            try {
                                obj.wait();
                            } catch (InterruptedException e) {
                                throw new RuntimeException(e);
                            }
                        }
                    }
                }
            }
        },"偶数线程2").start();
    }
}
